package h.c.z.designPattern.B01_Strategy;

/**
 * 说明：简单工厂实现
 * @author jinsicao
 * @version 2016年12月15日
 */
public class PriceFactory {

	public static double calculatePrice(double goodsPrice, int quantity, String type) {
		Price price = null;
		if ("打8折".equals(type)) {
			price = new Z8_PriceImpl();
		} else if ("打5折".equals(type)) {
			price = new Z5_PriceImpl();
		} else if ("满500减20".equals(type)) {
			price = new J20_PriceImpl();
		} else if ("满200减10".equals(type)) {
			price = new J10_PriceImpl();
		}
		if (price != null) {
			return price.calculatePrice(goodsPrice, quantity, type);
		} else {
			return goodsPrice * quantity;
		}
	}
}


/**
 * 说明：打5折
 * @author jinsicao
 * @version 2016年12月15日
 */
class Z5_PriceImpl implements Price {

	@Override
	public double calculatePrice(double goodsPrice, int quantity, String type) {
		return goodsPrice * quantity * 0.5;
	}

}

/**
 * 说明：打8折
 * @author jinsicao
 * @version 2016年12月15日
 */
class Z8_PriceImpl implements Price {
	
	@Override
	public double calculatePrice(double goodsPrice, int quantity, String type) {
		return goodsPrice * quantity * 0.8;
	}
	
}

/**
 * 说明：满500减20
 * @author jinsicao
 * @version 2016年12月15日
 */
class J20_PriceImpl implements Price {
	
	@Override
	public double calculatePrice(double goodsPrice, int quantity, String type) {
		double totalPrice = goodsPrice * quantity;
		if (totalPrice >= 500) {
			totalPrice -= 20;
		}
		return totalPrice;
	}
	
}

/**
 * 说明：满200减10
 * @author jinsicao
 * @version 2016年12月15日
 */
class J10_PriceImpl implements Price {
	
	@Override
	public double calculatePrice(double goodsPrice, int quantity, String type) {
		double totalPrice = goodsPrice * quantity;
		if (totalPrice >= 200) {
			totalPrice -= 10;
		}
		return totalPrice;
	}
	
}
